import router from './router'
import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

router.beforeEach(async (to, from, next) => {
  NProgress.start();

  document.title = getPageTitle(to.meta.title);

  // 从仓库中读取用户信息
  const hasUserInfo = store.getters.userInfo;

  // 判断进入的页面是否需要进行鉴权
  if (to.meta.auth) {
    // 需要进行鉴权
    if (hasUserInfo) {
      next();
    } else {
      // 获取用户标识
      const token = localStorage.getItem("token");
      if (token) {
        try {
          // 根据标识获取用户信息
          await store.dispatch("user/getInfo");
          next();
        } catch (err) {
          // 获取用户信息失败，即标识无效
          await store.dispatch("user/resetToken");
          // 提示用户登录已过期
          Message.error("登录已过期，请重新登陆");
          // 跳转到登录页
          next({
            path: "/login",
            query: {
              redirect: to.path
            }
          });
        }
      } else {
        // 跳转到登录页
        next({
          path: "/login",
          query: {
            redirect: to.path
          }
        });
      }
    }
  } else {
    // 不需要鉴权
    if (to.path === "/login" && hasUserInfo) {
      // 跳转到首页
      next("/");
    } else {
      // 放行
      next();
    }
  }
})

router.afterEach(() => {
  NProgress.done();
});
